home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGBLER / HERCBIOS.LZH / HERCPIXL.C < prev    next >
C/C++ Source or Header  |  1980-01-01  |  3KB  |  119 lines

  1.  
  2. /*
  3.  *     HERCPIXL.C
  4.  *     Dave Tutelman  -  last modified 8/86
  5.  *
  6.  *     This is a set of basic graphic routines for the Hercules
  7.  *     Board (or at least the SuperComputer version of it; I assume
  8.  *     that they work with the real thing).
  9.  *             alfa ()         puts us in alphanumeric mode.
  10.  *             grafix (page)   puts us in graphics mode in page 0 or 1
  11.  *             pixel (x,y,val) puts a pixel at <x,y>. Bright dot if
  12.  *                             val=1, dark dot if val=0.
  13.  *             dchar (x,y,c)   puts character "c" at <x,y>. Note that
  14.  *                             character raster is 90 x 29.
  15.  *             swpage (page)   switches to a different page.
  16.  *             waitkey ()      just waits till a key is pressed.
  17.  *
  18.  *     Actually, the routines should work with any board, since the
  19.  *     BIOS calls are used throughout.  It's Hercules-specific only
  20.  *     because I've defined the graphics and alpha modes for my
  21.  *     Hercules BIOS.
  22.  *
  23.  *     Compile with deSmet C.
  24.  */
  25.  
  26. #define VIDI    0x10           /* video interrupt, normally 10H  */
  27. #define        KBD     0x16            /* keyboard interrupt */
  28. #define ALFA_MODE      7       /* monochrome alpha mode */
  29. #define GRAF_MODE      8       /* Hercules graphics mode */
  30.  
  31. int    page = 0;
  32. extern unsigned _rax,_rbx,_rcx,_rdx;
  33.  
  34. /*
  35.  * This puts us back in alphanumeric mode
  36.  */
  37.  
  38. alfa (dummy)
  39.        unsigned int dummy;
  40. {
  41.        _rax = ALFA_MODE;       /* mono 80-col mode */
  42.        _doint ( VIDI );        /* set mode */
  43. }
  44.  
  45. /*
  46.  *     This one switches us to hercules graphics mode
  47.  *             in page 0 or 1
  48.  */
  49.  
  50. grafix (newpage)
  51.        int newpage;
  52. {
  53.  
  54.        _rax = GRAF_MODE;                       /* herc grafix mode */
  55.        _doint ( VIDI );        /* set mode */
  56.  
  57.        /*  now set the page */
  58.        swpage (newpage);
  59. }
  60.  
  61. /*
  62.  *   This writes a pixel at (x,y), where (0,0) is the upper-left
  63.  *   corner of the screen.  If val = 0 then the pixel is erased.
  64.  */
  65.  
  66. pixel (x, y, val)
  67.        int x, y, val;
  68. {
  69.  
  70.        _rax = 0x0C00 + val;    /* function 12      */
  71.        _rcx = x;
  72.        _rdx = y;
  73.        _doint ( VIDI );        /* set mode */
  74.  
  75. }
  76.  
  77.  
  78. /*
  79.  *     dchar (x,y,c)   puts character "c" at <x,y>. Note that
  80.  *                     character raster is 90 x 25.
  81.  */
  82.  
  83. dchar (x,y,c)
  84.        int x,y;
  85.        char c;
  86. {
  87.  
  88.        _rax = 2*256;           /* AH=Fn#2 */
  89.        _rdx = 256*y + x;               /* DH=row, DX=col */
  90.        _rbx = page * 256;              /* BH=page  */
  91.        _doint (VIDI);          /* set cursor */
  92.  
  93.        _rax = 10*256 + (int) c;        /* AH=Fn#10, AL=char */
  94.        _rbx = page * 256;              /* BH=page */
  95.        _rcx = 1;                       /* CX=count */
  96.        _doint (VIDI);          /* write character */
  97. }
  98.  
  99.  
  100. /*
  101.  *     This one switches us to a different page, without changing
  102.  *     the contents of that page.
  103.  */
  104.  
  105. swpage (newpage)
  106.        int     newpage;
  107. {
  108.        page = newpage;
  109.        _rax = 0x500 + page;            /* new page function */
  110.        _doint ( VIDI );        /* interrupt call */
  111. }
  112.  
  113.  
  114. waitkey ()
  115. {
  116.        _rax = 0;               /* keyboard blocking read function */
  117.        _doint (KBD);
  118. }
  119.